package com.dc.gameserver.extComponents.springDataRedisCache;

import com.dc.gameserver.extComponents.springDataRedisCache.Operations.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author 石头哥哥
 *         Date: 13-11-8</br>
 *         Time: 下午4:13</br>
 *         Package: Server.ExtComponents.RedisManager</br>
 *         注解： RedisTemplate实现RedisOperations接口，提供value，list，set，sortset，hash以及其他redis操作方法；
 *         value，list，set，sortset，hash等操作划分为不同操作类：ValueOperations，ListOperations，SetOperations，
 *         ZSetOperations，HashOperations以及bound接口；这些操作都提供了默认实现，这些操作都采用RedisCallback回调实现相关操作
 *         redisTemplate:默认是jdk序列化方案
 *
            //cache singleton objects (where possible)
            private ValueOperations<K, V> valueOps;
            private ListOperations<K, V> listOps;
            private SetOperations<K, V> setOps;
            private ZSetOperations<K, V> zSetOps;

            基于spring-redis+ redis的缓存封装
            应用场景：分布式环境
 *
 */
@Service
@SuppressWarnings("unchecked")
public class RedisServiceList implements ListOperations {

    @Resource
    private RedisTemplate<Integer, List<?>> redisTemplate;

    /**
     * @param key
     * @param list 其中 list中的数据应该实现序列化接口
     */
    @Override
    public void set(int key, List<?> list) {
        redisTemplate.opsForValue().set(key,list);
    }

    /**
     * but not delete
     * @return
     */
    @Override
    public List<?> get(int key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     *
     * 删除 缓存 key对应的value
     *
     * @param key
     */
    @Override
    public void del(int key) {
        redisTemplate.delete(key);
    }
}
